#include "comm.h"

int main()
{
    // 创建命名管道
    umask(0);
    if (mkfifo(FILE_NAME, 0666) < 0)
    {
        std::cout << "server mkfifo fail!" << endl;
        exit(1);
    }
    // 以读的方式打开fd
    int fd = open(FILE_NAME, O_RDONLY);
    if (fd < 0)
    {
        std::cerr << "server open fail!" << endl;
        exit(2);
    }

    int fout = open("file_bat.txt", O_CREAT | O_WRONLY, 0666);
    if (fout < 0)
    {
        printf("fout open fail!\n");
        exit(3);
    }
    // 先从fd读数据，读到buffer中，再把buffer中的数据写入到新拷贝的文件中
    char buffer[128];
    while (1)
    {
        buffer[0] = '\0';
        ssize_t n = read(fd, buffer, sizeof(buffer) - 1);
        // client发送的数据可能是 1+1  7*8
        if (n > 0)
        {
            buffer[n] = '\0';
            // std::cout << "client send#: " << buffer << endl;
            printf("client send#: %s\n", buffer);
            // 直接写入到file_bat.txt中
            write(fout, buffer, n);

            // if(fork() == 0)
            // {
            //     //子进程进行程序替换
            //     execlp(buffer, buffer, NULL);
            //     exit(0);
            // }
            // waitpid(-1, nullptr, 0);

            // 处理计算逻辑
            // string symbol = "+-*/%";
            // char *msg = buffer;
            // int flag = 0;
            // while (*msg)
            // {
            //     switch (*msg)
            //     {
            //     case '+':
            //         flag = 0;
            //         break;
            //     case '-':
            //         flag = 1;
            //         break;
            //     case '*':
            //         flag = 2;
            //         break;
            //     case '/':
            //         flag = 3;
            //         break;
            //     case '%':
            //         flag = 4;
            //         break;
            //     default:
            //         break;
            //     }
            //     msg++;
            // }
            // msg = buffer;
            // // 分割buffer中的数据
            // char *c1 = strtok(msg, "+-*/%");
            // char *c2 = strtok(NULL, "+-*/%");
            // int n1 = atoi(c1);
            // int n2 = atoi(c2);
            // int ret = 0;
            // switch (flag)
            // {
            // case 0:
            //     ret = n1 + n2;
            //     break;
            // case 1:
            //     ret = n1 - n2;
            //     break;
            // case 2:
            //     ret = n1 * n2;
            //     break;
            // case 3:
            // {
            //     if (n2 == 0)
            //     {
            //         std::cout << "Div Excption!" << endl;
            //         ret = 0;
            //     }
            //     ret = n1 / n2;
            // }
            // break;
            // case 4:
            // {
            //     if (n2 == 0)
            //     {
            //         std::cout << "Mod Excption!" << endl;
            //         ret = 0;
            //     }
            //     ret = n1 % n2;
            // }
            // break;
            // }

            // printf("%d %c %d = %d\n", n1, symbol[flag], n2, ret);
        }
        else if (n == 0)
        {
            std::cout << "client quit!" << endl;
            break;
        }
        else
        {
            std::cout << "read error!" << endl;
            break;
        }
    }
    close(fd);
    return 0;
}
